<%@ page import="java.util.Date" %> <%--导包,jsp.java亦有对应代码--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<%@ page errorPage="500.jsp" %>--%>
<%--假如访问本页面发生错误，跳转至error.jsp--%>
<%--但一般不会用这个，可以直接取web.xml 中定义配置--%>
<%--类似的还有   @page ... --%>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<%
    //int error = 10 / 0;  //状态码500
%>
<!--html注释在客户端通过查看页面源代码可见-->
<%--jsp注释不可见--%>

<%--下面的java代码在 jsp.java中有对应片段,一模一样 --%>
<% System.out.println("sd"); //直接运行的,这输出在server console中,可不是在页面中 %>
<%=new Date()%>  <%--直接显示在页面中该位置 在jsp.java中对应 out.print(new Date()); --%>

<%
    for (int i = 0; i < 7; i++) {
        out.write("<h1>haha-" + i + "</h1>");
    }
%>

<%--像这种代码分段写，中间的html片段多次打印，实际上3个小片段逻辑上是整体，所以能用i
效果和转换后的java代码几乎和上面一样--%>
<%
    for (int i = 0; i < 7; i++) {
%>
<h1>wawa-<%=i%>
</h1>
<%
    }
%>
<hr/>

<%--实际上定义了一个类里面的代码块和方法和属性,这些代码在jsp.java代码中就是归于主类下--%>
<%!
    static {
        System.out.println("hello");
    }

    private int age = 10;

    public void say() {
        System.out.println("say");
    }
%>

<%
    //其他java代码都是在主类的service方法下，所以可以访问主类的私有属性 age
    System.out.println(age);
    say();
%>

<%--实际上是把两个jsp文件中的内容嵌入在这里,本质上还是一样的--%>
<%@include file="common/header.jsp" %>
<%@include file="common/fooster.jsp" %>
<%
    //int k = 1; //因为header.jsp已经定义了 int k = 0,所以此时再定义会报错
    //但以后面的方式jsp引入后,却可以用，我还不明白
%>
<%--虽然下面两个语句的效果与上面的一样，但在jsp.java中代码相差甚远
上面包含进header.jsp实际是 out.write("<h1>header<h1>")
但下面的是  org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "common/header.jsp", out, false);
--%>
<jsp:include page="common/header.jsp"/>
<jsp:include page="common/fooster.jsp"/>

</body>
</html>

